package toOffer;

/**
 * <h3>leetcode</h3>
 *
 * @author BigFaceCat
 * @date 2024/2/25 16:54
 * @description <p>后缀表达式 </p>
 */

import java.util.*;

/**
 * 题目：后缀表达式是一种算术表达式，它的操作符在操作数的后面。
 * 输入一个用字符串数组表示的后缀表达式，请输出该后缀表达式的计算结
 * 果。假设输入的一定是有效的后缀表达式。例如，后缀表达式["2", "1", "3",
 * "*", "+"]对应的算术表达式是“2 + 1 * 3”，因此输出它的计算结果 5。
 */

public class toOffer6_2_36 {
    public static void main(String[] args) {
        String[] tokens = {"2","1","+","3","*"};
        System.out.println(evalRPN(tokens));
    }

    public static int evalRPN(String[] tokens) {
        LinkedList<Integer> stack = new LinkedList<>();
        for (int i = 0; i < tokens.length; i++) {
            switch (tokens[i]) {
                case "+":
                case "-":
                case "*":
                case "/":
                    stack.push(count(stack.pop(), stack.pop(), tokens[i]));
                    break;
                default: //default加不加break无所谓，它永远在case之后执行、不管它放在哪总是最后一个被执行的
                    stack.push(Integer.valueOf(tokens[i]));
            }
        }
        return stack.pop();
    }

    public static int count(Integer num1, Integer num2, String operatior) {
        switch (operatior) {
            case "+":
                return num1 + num2;
            case "-":
                return num2 - num1;
            case "*":
                return num1 * num2;
            case "/":
                return num2 / num1;
            default:
                return 0;
        }
    }

}
